package Server;
import java.net.*;
import java.util.Vector;
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import sun.misc.BASE64Encoder;



import Server.Sensor;
import Server.Database.Conexion;

public class TCPServer extends JFrame implements ActionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JButton btnSearch;
	private JButton btnConnect;
	private JButton btnSalir;
	private JButton btnAdmin;
	public static JTextField txtSearch;
	public static JTextArea txtResult;
	
	static boolean userCorrect=false;
	static boolean passCorrect=false;
	static boolean userAdmin=false;
	//static boolean passAdmin=false;
	static boolean getFoto=false;
	
	static DataOutputStream outToServer;
	static BufferedReader inFromUser;
	static BufferedReader inFromServer;
	static DataInputStream inServer;
	static BufferedReader inFromClient;
	static DataOutputStream outToClient;
	static DataOutputStream imageToClient;
	
	static String ID_Vehiculo= "Vehiculo 1"; //(ej. Vehículo 2)
	static boolean GPS=false; //Estado del GPS (ON=true/OFF=false)
	static Vector<Sensor> sensores=new Vector<Sensor>(); //Varios sensores
	static byte[] image = null;
	static ImageIcon foto=null;
	
	static float latitud;
	static float longitud;
	
	public static String usuario="";
    public static String respuesta="";
    public static String imagen="";
    public static String comando="";
    public static String func="";
    public static String subfunc="";
    public static String direccionServer="";

 // Configurar GUI
 	public TCPServer()
 	{
 		this.setTitle("Cliente del Servidor de Localización");
 		// Cbtener panel de contenido y establecer su esquema
 		Container content = getContentPane();
 		content.setLayout(null);
  
 		// Crear botones y cajas de texto
  
 		txtSearch=new JTextField();
 		txtResult=new JTextArea();
 		
 		btnSearch = new JButton(" Search ");
 		btnConnect=new JButton("CONNECT");
 		btnSalir=new JButton(" SALIR ");
 		btnAdmin=new JButton(" ADMIN ");
 		btnSearch.setBounds(500,40,100,20);
 		btnConnect.setBounds(500,70,100,20);
 		btnSalir.setBounds(500,100,100,20);
 		btnAdmin.setBounds(500,130,100,20);
 		txtSearch.setBounds(90,40,400,20);
 		txtResult.setBounds(90,70,400,100);
  
 		content.add(btnSearch);
 		content.add(btnConnect);
 		content.add(btnAdmin);
 		content.add(btnSalir);
 		content.add(btnAdmin);
 		content.add(txtSearch);
 		content.add(txtResult);
  
 		// Crear una instancia de la clase interna managerButton
 		// a usar para el manejo de eventos de botones
  
 		//managerButton manager = new managerButton();
 		btnSearch.addActionListener(this);
 		btnConnect.addActionListener(this);
 		btnSalir.addActionListener(this);
 		btnAdmin.addActionListener(this);
  
 		//Damos medidas y visibilidad a nuestra pantalla
 		setSize(700,250);
		
 		setVisible(true);
 	}
   
	public TCPServer (String id, Vector<Sensor> sensores) {
		ID_Vehiculo = id;
		GPS=false;
        TCPServer.sensores=sensores;
	}
	
	public static String validarUsuario (String user) {
		//System.out.println(user);
		String s=Conexion.user(user);
		if (user.equals("")) {
			return respuesta=("401 ERR Falta el nombre de usuario."+'\n');
		}
		else if (s==user) {
			userCorrect=true;
			usuario=user;
			Conexion.setOnline(user);
			return respuesta=("201 OK Bienvenido "+user+"."+'\n');
			
		}
		else {
			return respuesta=("402 ERR No existe el usuario."+'\n');
		}
	}
	
	public static void validarUsuarioAdmin (String user) {
		//Se pasa el nombre a la base de datos y se comprueba si ese usuario es admin
		if(Conexion.isAdmin(user))
		  userAdmin = true;
	}
	
	public static void validarContraseña (String login,String pass) {
		boolean b=Conexion.pass(login, pass);
		if (pass.equals("")) {
			respuesta=("403 ERR Falta la clave."+'\n');
		}
		else if (b) {
			respuesta=("202 OK Bienvenido al sistema."+'\n');
			passCorrect=true;
		}else if(!b) {
			respuesta=("402 ERR La clave es incorrecta."+'\n');
			passCorrect=false;
		}
	}
	
	public static void validarContraseñaAdmin (String pass) {
		//Se pasa el pass a la base de datos y se comprueba si esa contraseña es de user admin
		
		//passAdmin = true;
	}
	
	public static void listSensor () {
		/*
		sensores=Conexion.listaSensores();
		
		respuesta=("112 OK Lista de sensores."+'\n');
		for( int i=0; i<sensores.size() ; i ++ ) {
			Sensor s = sensores.elementAt(i);
			respuesta=respuesta+(s.getID()+"; "+s.getDescr()+" ;"+s.getEstado()+ '\n');	
		} 
		respuesta=respuesta+("212 OK Lista finalizada."+'\n'); */
		String lsens="";
		sensores=Conexion.listaSensores();
		for( int i=0; i<sensores.size() ; i ++ ) {
			Sensor s = sensores.elementAt(i);
			lsens=lsens+(s.getID()+"; "+s.getDescr()+" ;"+s.getEstado()+ '\n');	
		} 
		System.out.println(lsens);
		respuesta="112 OK Lista de sensores."+'\n'+lsens+"212 OK Lista finalizada."+'\n'+"*"+'\n';
		
	}
	
	public static void Historico (String ID_Sensor) {
       System.out.println("id_sensor:"+ID_Sensor);
		if(ID_Sensor.equals("")){
			System.out.println("if");
        	respuesta=("415 ERR Falta parámetro id_sensor."+'\n');
        }else{
        	System.out.println("else");
        	Vector<Medida> v=Conexion.listaMedidas(Integer.parseInt(ID_Sensor));
        	if(v.isEmpty()){
        		respuesta=("414 ERR Sensor desconocido."+'\n');
        	}else{
		respuesta=("113 OK Lista de medidas.");
        Sensor.setMedidas(v);
        respuesta=respuesta+'\n'+Sensor.getMedidas();
		respuesta=respuesta+"212 OK Lista finalizada."+'\n'+"*"+'\n'; 
        	}
        }
	}
	
	public static void On (int ID_Sensor) {
	    int i=Conexion.setSensorON(ID_Sensor);
		if (i==1) {
			//sensores.elementAt(ID_Sensor+1).setEstado(true);
			respuesta=("203 OK Sensor activo."+'\n');
		}
		else if (i==-1){
			respuesta=("418 ERR Sensor no existe."+'\n');
		}
		else {
			respuesta=("417 ERR Sensor en estado ON."+'\n');
		}
		
	}
	
	public static void Off (int ID_Sensor) {
		int i=Conexion.setSensorOFF(ID_Sensor);
		if (i==1) {
			//sensores.elementAt(ID_Sensor+1).setEstado(false);
			respuesta=("204 OK Sensor desactivado."+'\n');
		}
		else if (i==-1){
			respuesta=("419 ERR Sensor no existe."+'\n');
		}
		else {
			respuesta=("417 ERR Sensor en estado OFF."+'\n');
		}
		
	}																		
	
	public static void OnGPS (String id_vehiculo) {
		boolean b=Conexion.setGPSON(id_vehiculo);
		if (b) {
			GPS=true;
			respuesta=("205 OK GPS activado."+'\n');
		}
		else if (!b){
			respuesta=("419 ERR GPS en estado ON."+'\n');
		}	
		
	}
	
	public static void OffGPS (String id_vehiculo) {
		boolean b=Conexion.setGPSOFF(id_vehiculo);
		if (b) {
			GPS=false;
			respuesta=("206 OK GPS desactivado."+'\n');
		}
		else if (!b){
			respuesta=("420 ERR GPS en estado OFF."+'\n');
		}
	}
	
	public static void getValAct (String str_sensor){
		//No sé como integrar el método getValAct de la clase Conexion
		System.out.println(str_sensor);
		if(str_sensor.equals("")){
			respuesta=("415 ERR Falta parámetro id_sensor."+'\n');
		}else {
			int ID_Sensor= Integer.parseInt(str_sensor);
			int cero=0;
			int menosUno=-1;
			Object o=Conexion.getValact(ID_Sensor);
			if(o.equals(cero)){
			respuesta=("416 ERR Sensor en OFF."+'\n');
		}else if(o.equals(menosUno)){
			respuesta=("416 ERR Sensor desconocido."+'\n');
		}else{
			Medida m=(Medida)o;
			respuesta=("114 OK "+m.getFecha()+";"+m.getHora()+";"+m.getCoordenadas()+";"+m.getValor()+'\n');
		}
		}
	}
	
	
	public static void getFoto (String id_vehiculo) throws IOException {
		String s=Conexion.getFoto(id_vehiculo);
		if (s=="") {
			respuesta=("420 ERR GPS en estado OFF."+'\n');
		}
		else {
			
			
			//Esto es para obtener los bytes de la imagen por si queremos ponerlo mas bonito
			File f=new File("Resources/foto.jpg");
			BufferedImage i=ImageIO.read(f);
			imagen=encodeToString(i, "jpg");
			//outToClient.writeBytes(imageStr);
		/*	try {
				//foto=new ImageIcon(s);
			File file = new File("Imagenes/foto.jpg"); 
			FileInputStream in = new FileInputStream(file); 
			BufferedInputStream reader = new BufferedInputStream(in); 
			int length = reader.available(); 
			image = new byte[length]; 
			reader.read(image, 0, length);
			reader.close();
				
			
			
			
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} */
			respuesta=("206 OK. "+imagen.length()+" bytes transmitiendo."+'\n');
			
		}
	}
	
	public static String encodeToString(BufferedImage image, String type) {
        String imageString = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        try {
            ImageIO.write(image, type, bos);
            byte[] imageBytes = bos.toByteArray();
            BASE64Encoder encoder = new BASE64Encoder();
            imageString = encoder.encode(imageBytes);

            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return imageString;
    }
	
	public static void getLoc (int id_vehiculo) {
		String s=Conexion.getCoord();
		respuesta=("114 OK"+s+'\n');
	}
	
	
	public static void maxConect(int n) {
		//Si se desea ejecutar este comando el usuario deberá haberse identificado como administrador
		//En la ventana servidora, es decir, si al introducir en la ventana servidora sus datos, se valida
		//que es un administrador, podrá ejecutar en esa ventana este comando
		
		//Limita el número de conexiones y devuelve un String de confirmación
	}
	
	public static String showOnline() {
		//Si se desea ejecutar este comando el usuario deberá haberse identificado como administrador
		//En la ventana servidora, es decir, si al introducir en la ventana servidora sus datos, se valida
		//que es un administrador, podrá ejecutar en esa ventana este comando
		Vector<String> u=Conexion.listaOnline();
		String us="";
		for( int i=0; i<u.size() ; i ++ ) {
			String str = u.elementAt(i);
			us=us+str+'\n';
		}
		
		respuesta=us;
		return respuesta;
		
		//Se conecta a la base de datos y devuelve una lista de los usuarios que están ONLINE
		//Se carga un array con todos los usuarios online
		//Recorre el array y devuelve un String con el nombre, contraseña y estado de todos los usuarios del array (separados por '\n')
		// return String = nameuseri + " - " + passuseri + '/n';
	}
	
	public static void disconectUser(String name) {
   
		Conexion.setOffline(name);
		respuesta="USER "+name+" ha sido desconectado.";
		
	}
	
	public static String showUsers() {
		String lusers="";
                usuarios=Conexion.listaUsers();
                for( int i=0; i<usuarios.size() ; i ++ ) {
                        Usuario usr = usuarios.elementAt(i);
                        lusers=lusers+(usr.getLogin()+"; "+usr.isOnline()+"; "+usr.isAdmin()+ '\n');
                }
               System.out.println(lusers);
               respuesta="112 OK Lista de usuarios."+'\n'+lusers+"212 OK Lista finalizada."+'\n'+"*"+'\n';
		}
		
		respuesta=us;
		return respuesta;
	}
	
	public static String setNombreUsuario(String user, String newName) {
		//Si se desea ejecutar este comando el usuario deberá haberse identificado como administrador
		//En la ventana servidora, es decir, si al introducir en la ventana servidora sus datos, se valida
		//que es un administrador, podrá ejecutar en esa ventana este comando
		
		
		Conexion.setNameUser(user, newName);
		respuesta="USER "+user+" ha sido editado.";
		return respuesta;
		
		//El usuario referenciado por el nombre "user" en la base de datos cambia su atributo nombre por newName
		//retorna un String de confirmación
		/** El comando será SETNOMBREUSUARIO nombreantiguo-nombrenuevo
		 */
	}
	
	public static String setContraseñaUsuario(String user, String newpass) {
		//Si se desea ejecutar este comando el usuario deberá haberse identificado como administrador
		//En la ventana servidora, es decir, si al introducir en la ventana servidora sus datos, se valida
		//que es un administrador, podrá ejecutar en esa ventana este comando
		Conexion.setPass(user, newpass);
		respuesta="USER "+user+" ha sido editado.";
		return respuesta;
		
		//El usuario referenciado por el nombre "user" en la base de datos cambia su atributo pass por newPass
		//retorna un String de confirmación
		
		/** El comando será SETPASSUSUARIO nombre-passnuevo
		 */
	}
	
	public static void anyadirUsuario(String name, String pass) {
		Conexion.insertarUsuario(name, pass,false,false);
		respuesta="USER "+name+" ha sido creado";   
	}
	
	public static void eliminarUsuario(String name) {
		Conexion.deleteUser(name);
	}
	
	public static void lecturaBuffer() {
		 try {
			comando = inFromClient.readLine();
			 func =comando.substring(0,5);
             subfunc=comando.substring(0, 3);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void escrituraBuffer() {
		 try {
			 outToClient.writeBytes(respuesta+'\n');
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	
        /**
         * Metodo principal de la clase
         * @param args String[] con los parámetros de ejecución
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
        	//Conexion.setAdminTrue("urtzi");
        	String nameValid="";
        	JFrame.setDefaultLookAndFeelDecorated(true);
        	JDialog.setDefaultLookAndFeelDecorated(true);
        	TCPServer aplicacion = new TCPServer();
    		aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    		aplicacion.setLocation(600, 300);
    		txtResult.setText("Insertar dirección IP del servidor: ");
        try{
        	//Creamos un socke de bienvenida en el puerto _ _ _ _ 
        	ServerSocket welcomeSocket = new ServerSocket(7406);
        	//ServerSocket welcomeImageSocket = new ServerSocket(7408);
            System.out.println("Esto funciona...");
            Socket connectionSocket = welcomeSocket.accept();
            //Socket connectionImageSocket=welcomeImageSocket.accept();
        	System.out.println("Conexión Establecida");
            while (!comando.equals("SALIR")) {
            	//Esperamos a que un socket intente conectar al servidor
            	//connectionSocket = welcomeSocket.accept();
            	System.out.println("Conexión Establecida");
            	
            	//Creamos un canal de entrada asociado al socket
            	BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            	
            	
            	//if(comando.equals("GET_FOTO")){
            	//System.out.println("esgetfoto");
            	//	ObjectOutputStream imageToClient=new ObjectOutputStream(connectionSocket.getOutputStream());
            	//}else{
            	//	System.out.println("no getfoto");
            	//	Creamos un canal de salida y lo asociamos al socket
               // os=connectionSocket.getOutputStream();	
            	DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            	//DataOutputStream imageToClient= new DataOutputStream(connectionSocket.getOutputStream());
            	//ObjectOutputStream imageToClient= new ObjectOutputStream(connectionImageSocket.getOutputStream());
            	//}
            	//Leemos una linea del socket
            	comando = inFromClient.readLine();
              
            	if(comando.length()>4){
            		if(comando.substring(0,4).equals("OFF ")){
            			 subfunc=comando.substring(0, 3);
                         func="";
            		}else{
            	func =comando.substring(0,5);
            	subfunc="";
            		}
               }else{
                
            	   subfunc=comando.substring(0, 3);
                func="";
               }
               
               System.out.println(func);
                //se ejecuta la función correspondiente al comando seleccionado
                if ((func.equals("USER "))&&(!userCorrect)&&(!passCorrect)&&(!getFoto)) {
                	String name = comando.substring(5, (comando.length()));
                	respuesta=validarUsuario(name);
                	if(!Conexion.isAdmin(name))
                		userAdmin=true;
                	nameValid=name;
                	
                }
                else if (func.equals("PASS ")&& (userCorrect ==true)&&(!passCorrect)&&(!getFoto)) {
                	String contr = comando.substring(5, (comando.length()));
                	validarContraseña(nameValid,contr);
                	validarContraseñaAdmin(contr);
                }
                else if (func.equals("LISTS")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	listSensor();
                }
                else if (func.equals("HISTO")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	//int int_sens = Integer.parseInt (comando.substring(10, (comando.length())));
                	String str_sens=comando.substring(10, (comando.length()));
                	Historico(str_sens);
                }
                else if (subfunc.equals("ON ")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	
                	int int_sens = Integer.parseInt (comando.substring(3, (comando.length())));
                	
                	On(int_sens);
                }
                else if (subfunc.equals("OFF")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	int int_sens = Integer.parseInt (comando.substring(4, (comando.length())));
                	Off(int_sens);
                }
                else if (func.equals("ONGPS")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	System.out.println("Entra");
                	OnGPS(ID_Vehiculo);
                }
                else if (func.equals("OFFGP")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	OffGPS(ID_Vehiculo);
                }
                else if (func.equals("GET_V")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	//int int_sens = Integer.parseInt (comando.substring(11, (comando.length())));
                	String str_sens=comando.substring(11, (comando.length()));
                	getValAct(str_sens);
                }
                else if (func.equals("GET_F")&& (userCorrect ==true)&& (passCorrect ==true)&&(!getFoto)) {
                	getFoto(ID_Vehiculo);
                	getFoto=true;
                }
                else if (func.equals("GET_L")&& (userCorrect ==true)&& (passCorrect ==true)&&(getFoto)) {
                	getLoc(Integer.parseInt(ID_Vehiculo.substring(9,ID_Vehiculo.length())));
                	getFoto=false;
                }
                else if(comando.equals("SALIR")){
                	respuesta="208 OK Adiós."+'\n';
                }
                else {
                	respuesta = "COMANDO INCORRECTO";
                }
              
                //Escribimos una linea en el socket
                System.out.println(respuesta);
                System.out.println("UserCorrect: "+userCorrect);
                System.out.println("PassCorrect: "+passCorrect);
                if (func.equals("GET_F")&& (userCorrect ==true)&& (passCorrect ==true)){
                	
                	//ByteArrayInputStream bais=new ByteArrayInputStream(image);
                	//String s=new String(image);
                //	System.out.println(imagen);
                	outToClient.writeBytes(respuesta);
                	outToClient.writeBytes(imagen+'\n'+"*"+'\n');
                	
                	//imageToClient.write(image);
                }else{
                	outToClient.writeBytes(respuesta);
                }
            }
          //  connectionSocket.close();
          // welcomeSocket.close();
          
            
        }catch(Exception e){
            System.err.println("main: " + e);
            e.printStackTrace();
        }
    }
        
     // Clase interna para el manejo de eventos de botón
    	//public class managerButton implements ActionListener
    	//{
    		// Manejar evento de botón
    		public void actionPerformed( ActionEvent event )
    		{
    			Socket clientSocket = null;
    			JButton botonPulsado = (JButton)event.getSource();

    				if (botonPulsado==btnConnect) {
    		           
    		            direccionServer = txtSearch.getText();
    		            //Creamos el socket cliente y conectamos con el servidor
    					try {
    						clientSocket = new Socket(direccionServer, 7406);
    					} catch (UnknownHostException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    					catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    		            //Creamos el canal de entrada
    					try {
    						inFromUser =new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    		            
    					//Creamos el canal de salida y lo asociamos al socket
    					try {
    						outToServer = new DataOutputStream(clientSocket.getOutputStream());
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    					//Creamos el canal de entrada y lo asociamos al socket
    					try {
    						inServer=new DataInputStream(clientSocket.getInputStream());
    						inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    		            txtSearch.setText("");
    		            txtResult.setText("Conexión Establecida. Introduzca comandos...");
    		           
    				} 
    				else if (botonPulsado==btnSearch) {
    					//Se manda el comando
    					comando = txtSearch.getText();
    					/*try {
    						comando = inFromUser.readLine();
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}*/
    					//Enviamos al servidor
    					try {
    						outToServer.writeBytes(comando + '\n');
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    					//Leemos la linea que viene del servidor
    					try {
    						//String s="";
    						//System.out.println(comando);
    						//System.out.println(inFromServer.readLine());
    						//System.out.println(inFromServer.readLine());
    						//System.out.println(inFromServer.readLine());
    						
    						respuesta=inFromServer.readLine();
    						System.out.println("respuesta:"+respuesta);
    						
    						/*while(linea!=null){
    						//System.out.println("Ready");
    							 s= s+linea;
    							linea=inFromServer.readLine();
    						}
    						
    						respuesta=s;
    						System.out.println(respuesta);*/
    						
    						
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    					System.out.println("FROM SERVER: " + respuesta);
    				    txtResult.setText("Comando enviado: "+comando+'\n'+"Respuesta desde el servidor:" +respuesta); 
    				    //Se borra el hueco de escritura
    				    txtSearch.setText("");
    					
    				}else if(botonPulsado==btnSalir){
    					this.dispose();
    				}
    			
    				else if(botonPulsado==btnAdmin) {
    					
    	    			try{
    	    				//Se manda el comando
    	    				comando = (txtSearch.getText());
    	    				String func = comando.substring(0, 5);
    	    				if (func.equals("MAXCO")&& userAdmin) {
    	    					//int n = Integer.parseInt (comando.substring(10, (comando.length()-1)));
    	    					//txtSearch.setText("");
    	    					//txtResult.setText(maxConect(n));
    	    				}
    	    				else if(func.equals("SHOWO")&& userAdmin) {
    	    					txtSearch.setText("");
    	    					txtResult.setText(showOnline());
    	    				}
    	    				else if(func.equals("DISCO")&& userAdmin) {
    	    					String name = comando.substring(13,(comando.length()));
    	    					txtSearch.setText("");
    	    					txtResult.setText(disconectUser(name));
    	    				}
    	    				else if (func.equals("SHOWU")&& userAdmin) {
    	    					txtSearch.setText("");
    	    					txtResult.setText(showUsers());
    	    				}
    	    				else if (func.equals("SETNO")&& userAdmin) { 
    	    					txtSearch.setText("");
    	    					int point=comando.indexOf(".");
    	    					String name=comando.substring(17, point);
    	    					String newname=comando.substring(point+1, comando.length());
    	    					txtResult.setText(setNombreUsuario(name, newname));
    	    				}
    	    				else if (func.equals("SETPA")&& userAdmin) {
    	    					txtSearch.setText("");
    	    					int point=comando.indexOf(".");
    	    					String name=comando.substring(13, point);
    	    					String pass=comando.substring(point+1, comando.length());
    	    					txtResult.setText(setContraseñaUsuario(name, pass));
    	    				}
    	    				else if (func.equals("ADDUS")&& userAdmin) {
    	    					txtSearch.setText("");
    	    					int point=comando.indexOf(".");
    	    					String name=comando.substring(11, point);
    	    					String pass=comando.substring(point+1, comando.length());
    	    					txtResult.setText(anyadirUsuario(name, pass));
    	    				}
    	    				else if (func.equals("DELET") && userAdmin) {
    	    					String name = comando.substring(14,(comando.length()));
    	    					txtSearch.setText("");
    	    					eliminarUsuario(name);
    	    					txtResult.setText(eliminarUsuario(name));
    	    				}
    	    				else {
    	    				}
    	    					
    	    				}
    	     
    	    			catch(Exception e)
    	    			{
    	    				JOptionPane.showMessageDialog(TCPServer.this,"No se encontró el comando");
    	    			}
    				}
    			
    		//}
    	}
}
